It is now commonplace for users to download media files, for example video and/or audio files, from Internet servers to play on their computing devices.
Various different techniques for downloading and playing media files are known. In perhaps the most basic technique, users must download a media file in its entirety before executing the media file on their computing device to play the file.
Alternative techniques have been developed that enable users to download media from servers and begin playing the files without first having to wait for the entire file to download.
One such technique is commonly referred to as media streaming. Generally, media streaming uses a stateful protocol, for example, the Real Time Streaming Protocol (RTSP), to establish and control media sessions between a client device and a streaming media server and one or more further protocols, for example, the Real-Time Transport Protocol (RTP) and the Real-time Control Protocol (RTCP) for media stream delivery. Once a session between the client device and the streaming server has been established, the server sends the media as a continuous stream of packets over, for example, the User datagram Protocol (UDP).
Hyper Text Transfer Protocol (HTTP) progressive download (PD) is an alternative technique to media streaming that enables users to download media files from standard HTTP servers to their computing devices and begin playing the files before the entire file has downloaded. Typically, when a specified amount of the media file has been buffered at a buffer in the client device, the media begins to play. Client devices that can support HTTP can seek to positions within the media file by performing byte range requests to the server. Unlike media streaming, HTTP progressive download is stateless, that is to say, if a HTTP client requests some data using a HTTP request, the server responds by sending the data and the transaction is terminated. Accordingly, each separate HTTP request for data in a media file is handled as a standalone operation.
When a media file is provided by way of streaming or progressive download to a client device over a communication network, the media file may require optimisation in the network to enable continuous playback at the client device. The optimisation may be necessary because of limitations of the user device (e.g. display resolution, display size, supported video format, and so on) and/or network limitations (e.g. available bandwidth).
Such optimisation may involve intercepting the media file en route from an origin server to a requesting user device and compressing the media content in the file further by re-encoding the media content, for example, at a lower bit rate. Such optimisation may involve transcoding and/or transrating the media content by changing one or more of the media content's attributes, for example, bit rate, resolution. frame rate, encoding protocol etc. The optimisation can act to reduce processing required by the user device and also to reduce the use of network resources by, for example, sending a smaller, more compressed file (i.e. having fewer bytes) to the device then what would have been provided had no optimisation taken place.
A proxy server in an access network can be used to intercept requests for content from a user device and corresponding responses from an origin server and optimising the content from the origin server before sending it to the user so that the content is optimised for the user device.
However, many file formats such as the ISO base media format (as defined in the standards document ISO/IEC 14496-12 established jointly by ISO, the International Standards Organisation, and IEC, the International Electrotechnical Commission), MPEG-4 Part 14 or MP4 (as defined in the standards document ISO/IEC 14496-14, where “MPEG” is the “Moving Pictures Expert Group”), quick time file format (MOV), Third Generation Partnership Project (3GPP), etc. require that information regarding the entire media file be first known in order to execute the media file for playback. For example, an information or index specifies the size and location of every audio sample and/or video frame of the media content in the media file. Where a media file is to be streamed to a computing device without first being optimised en route, such an index will be received by the computing device before it receives the actual media content and accordingly the computing device can execute a streaming playback of the media file based on the index. However, where a media file requires optimising, the index will only be created once the entire file has been optimised. A proxy server would therefore need to first download and optimise the entire media file in order to compile the index of the optimised media file for sending to the computing device (i.e. in order to subsequently allow an execution of the streamed optimised media file). Therefore, for at least these particular file formats, a user of a computing device will have to first wait for the file to be downloaded and optimised at the proxy server before they can then retrieve the newly created index for the optimised media file and subsequently execute a playback of the desired content.
Alternatively, the proxy server may have already downloaded, optimised and cached a plurality of content files in a pre-emptive manner so that the media files are ready to stream on-demand. However, this places a burden on the server to download, process and cache many content files without having any prior knowledge of which media files are to be requested by a user.
As described herein, a method, apparatus and computer program are provided so as to provide an improved system for providing a media content download for playback in a substantially real-time manner as the media content is downloaded.